<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 先说答案：会报错，fun is not a constructor
        // let fun = ()=>{

        // }
        // console.log(new fun());

        /*
            首先我们要清楚一个问题，那就是new操作符都做了什么？
                1. new构造函数会在内存中创建一个空对象
                2. this就会指向刚才创建的这个空对象
                3. 执行构造函数中的代码，给空对象添加属性和方法
                4. 返回这个新的对象(所以构造函数里是不需要写return的)
        */ 

        // 箭头函数内的this是静态的，所以指向定义时所在的对象，而不是调用时，this指向是不可以改变的
        var id = 10;
        var obj = {
            fun1:function(){
                console.log(this);
            },
            fun2:()=>{
                // this的指向是静态的，自动指向自己的上一级作用域，很明显，上一级是全局作用域
                console.log(this);
            }
        }
        // 从输出结果来看，fun1里的this是obj，但是fun2里的this就是window
        obj.fun1();
        obj.fun2();
    </script>
</body>
</html>